]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
NetworkMenu: take out an item from More... when another is destroyed
authorGiovanni Campagna <gcampagna@src.gnome.org>
Mon, 27 Jun 2011 15:45:24 +0000 (17:45 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 12 Jul 2011 23:33:47 +0000 (01:33 +0200)
When one of the networks in the main menu is removed and we have
a More... submenu, we can take the first out from the submenu and
show it in the main menu.

https://bugzilla.gnome.org/show_bug.cgi?id=647175

js/ui/popupMenu.js
js/ui/status/network.js

index e67729cb5f28f49ecdb516104dc49e8f1c85fe23..9e256b58fe7defe44e6f6bda4d09638ee5a811cf 100644 (file)
@@ -946,6 +946,14 @@ PopupMenuBase.prototype = {
         });
     },
 
+    get firstMenuItem() {
+        let items = this._getMenuItems();
+        if (items.length)
+            return items[0];
+        else
+            return null;
+    },
+
     removeAll: function() {
         let children = this._getMenuItems();
         for (let i = 0; i < children.length; i++) {
index 348fcd49d5df446b4fc7b32e317f178ac1bd160a..a4372b5a53cf372e8d5485af27432fec80a4571e 100644 (file)
@@ -1281,12 +1281,29 @@ NMDeviceWireless.prototype = {
         if (apObj.accessPoints.length == 0) {
             if (apObj.item)
                 apObj.item.destroy();
-            this._networks.splice(pos, 1);
-            if (this._overflowItem &&
-                this._overflowItem.menu.length == 0) {
-                this._overflowItem.destroy();
-                this._overflowItem = null;
+
+            if (this._overflowItem) {
+                if (!apObj.isMore) {
+                    // we removed an item in the main menu, and we have a more submenu
+                    // we need to extract the first item in more and move it to the submenu
+
+                    let apObj = this._overflowItem.menu.firstMenuItem;
+                    if (apObj.item) {
+                        apObj.item.destroy();
+
+                        this._createNetworkItem(apObj, NUM_VISIBLE_NETWORKS-1);
+                    }
+                }
+
+                // This can happen if the removed connection is from the overflow
+                // menu, or if we just moved the last connection out from the menu
+                if (this._overflowItem.menu.length == 0) {
+                    this._overflowItem.destroy();
+                    this._overflowItem = null;
+                }
             }
+            this._networks.splice(pos, 1);
+
         } else if (apObj.item)
             apObj.item.updateAccessPoints(apObj.accessPoints);
     },
@@ -1482,14 +1499,16 @@ NMDeviceWireless.prototype = {
                 }
             }));
         }
-        if (position < NUM_VISIBLE_NETWORKS)
+        if (position < NUM_VISIBLE_NETWORKS) {
+            apObj.isMore = false;
             this.section.addMenuItem(apObj.item, position);
-        else {
+        } else {
             if (!this._overflowItem) {
                 this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
                 this.section.addMenuItem(this._overflowItem);
             }
             this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS);
+            apObj.isMore = true;
         }
     },